package com.example.project.service;

import java.util.List;
import java.util.Map;

import com.example.project.entity.Issue;
import com.example.project.entity.IssueCategoryStats;
import com.example.project.entity.IssueProcessingStats;

/**
 * 需求处理统计服务接口
 */
public interface IssueStatsService {
    
    /**
     * 获取同类需求的处理统计数据
     * 
     * @param issue 当前需求
     * @return 同类需求的统计数据
     */
    Map<String, Object> getSimilarIssueStats(Issue issue);
    
    /**
     * 记录需求处理统计
     * 
     * @param issueId 需求ID
     * @param operationType 操作类型：1-领取，2-提交，3-审核
     * @param statusFrom 原始状态
     * @param statusTo 目标状态
     * @return 处理结果
     */
    boolean recordIssueProcessingStats(Long issueId, Integer operationType, Long statusFrom, Long statusTo);
    
    /**
     * 获取需求类别的处理统计数据
     * 
     * @param categoryId 类别ID
     * @param trackerId 跟踪类型ID（可选）
     * @param priorityId 优先级ID（可选）
     * @param projectId 项目ID（可选）
     * @return 类别统计数据
     */
    IssueCategoryStats getCategoryStats(Long categoryId, Long trackerId, Long priorityId, Long projectId);
    
    /**
     * 获取同类需求的历史处理记录
     * 
     * @param issue 当前需求
     * @param limit 返回数量限制
     * @return 同类需求的历史处理记录
     */
    List<IssueProcessingStats> getSimilarIssueHistory(Issue issue, Integer limit);
    
    /**
     * 重新计算类别统计数据
     * 
     * @param categoryId 类别ID
     * @return 处理结果
     */
    boolean recalculateCategoryStats(Long categoryId);
    
    /**
     * 获取用户处理需求的统计数据
     * 
     * @param userId 用户ID
     * @param limit 返回数量限制
     * @return 用户处理需求的统计数据
     */
    List<Map<String, Object>> getUserProcessingStats(Long userId, Integer limit);
}